static struct proc_dir_entry *dom_list_intf;
unsigned long direct_mmap(unsigned long, unsigned long, pgprot_t, int, int);
-int direct_unmap(unsigned long, unsigned long);
+int direct_unmap(struct mm_struct *, unsigned long, unsigned long);
static unsigned char readbuf[1204];
copy_from_user(&mem_data, (dom_mem_t *)buff, sizeof(dom_mem_t));
- if ( direct_unmap(mem_data.vaddr,
+ if ( direct_unmap(current->mm, mem_data.vaddr,
mem_data.tot_pages << PAGE_SHIFT) == 0 ) {
return sizeof(sizeof(dom_mem_t));
} else {
}
-int direct_unmap(unsigned long addr, unsigned long size)
+int direct_unmap(struct mm_struct *mm, unsigned long addr, unsigned long size)
{
int count = 0, tot_pages = (size+PAGE_SIZE-1) >> PAGE_SHIFT;
direct_mmap_node_t * node;
struct list_head * curr;
- struct list_head * direct_list = ¤t->mm->context.direct_list;
+ struct list_head * direct_list = &mm->context.direct_list;
curr = direct_list->next;
while ( curr != direct_list )
while ( count < tot_pages )
{
- direct_zap_page_range(current->mm, addr, PAGE_SIZE);
+ direct_zap_page_range(mm, addr, PAGE_SIZE);
addr += PAGE_SIZE;
count++;
}
#include <asm/uaccess.h>
#include <asm/pgalloc.h>
-extern int direct_unmap(unsigned long, unsigned long);
-
+extern int direct_unmap(struct mm_struct *, unsigned long, unsigned long);
int init_direct_list(struct mm_struct *mm)
{
while ( (curr = direct_list->next) != direct_list )
{
direct_mmap_node_t *node = list_entry(curr, direct_mmap_node_t, list);
- if ( direct_unmap(node->vm_start, node->vm_end - node->vm_start) != 0 )
+ if ( direct_unmap(mm, node->vm_start, node->vm_end - node->vm_start) )
BUG();
}
}